//////////////////////////////////////////////////////////////////////////

#ifndef _SCOPEGUARD_H_
#define _SCOPEGUARD_H_

//////////////////////////////////////////////////////////////////////////

#ifndef _MUTEX_H_
#include "mutex.h"
#endif

//////////////////////////////////////////////////////////////////////////


class ScopeGuard
{
//////////////////////////////////////////////////////////////////////////

public:

//////////////////////////////////////////////////////////////////////////


    /** Constructor. Locks the mutex. */
    ScopeGuard( Mutex& _mutex )
        : m_Mutex(_mutex)
    {
        m_Mutex.Lock();
    }


    /** Destructor. Unlocks the mutex. */
    ~ScopeGuard()
    {
        m_Mutex.Unlock();
    }


//////////////////////////////////////////////////////////////////////////

private:

//////////////////////////////////////////////////////////////////////////


    /** ScopeGuard mutex */
    Mutex& m_Mutex;


//////////////////////////////////////////////////////////////////////////
};


//////////////////////////////////////////////////////////////////////////

#endif

//////////////////////////////////////////////////////////////////////////
